// 1-1 STL教程
/**
 * C++ STL 教程
 * 在前面的章节中，我们已经学习了 C++ 模板的概念。C++ STL（标准模板库）是一套功能强大的 C++ 模板类，提供了通用的模板类和函数，这些模板类和函数可以实现多种流行和常用的算法和数据结构，如向量、链表、队列、栈。

 * C++ 标准模板库的核心包括以下三个组件：

    组件	                描述
    容器（Containers）	  容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器，比如 deque、list、vector、map 等。

    算法（Algorithms）	  算法作用于容器。它们提供了执行各种操作的方式，包括对容器内容执行初始化、排序、搜索和转换等操作。

    迭代器（iterators）	  迭代器用于遍历对象集合的元素。这些集合可能是容器，也可能是容器的子集。

 * 这三个组件都带有丰富的预定义函数，帮助我们通过简单的方式处理复杂的任务。

 * 下面的程序演示了向量容器（一个 C++ 标准的模板），它与数组十分相似，唯一不同的是，向量在需要扩展大小的时候，会自动处理它自己的存储需求：
*/

#include <iostream>
#include <vector>
int main(void)
{
  std::vector<int> vec;
  std::cout << "vec size: " << vec.size() << std::endl;
  for (int i = 0; i < 5; i++)
  {
    vec.push_back(i);
  }
  std::cout << "vec size: " << vec.size() << std::endl;

  for (int i = 0; i < vec.size(); i++)
  {
    std::cout << "vec[" << i << "]: " << vec[i] << std::endl;
  }
  // vec[2] = 20;

  std::vector<int>::iterator v = vec.begin();
  int i = 0;
  while (v != vec.end())
  {
    std::cout << "vec[" << i << "] : " << *v << std::endl;
    i++;
    v++;
  }

  printf("---------------end------------------\n");
  return 0;
}